#include "compile.hpp"
#include <string>
#include "runner.hpp"
#include "compile_run.hpp"
#include "../comm/httplib.h"
using namespace ns_compile;
using namespace ns_runner;
using namespace ns_compile_and_run;
using namespace httplib;

int main(int argc, char* argv[])
{
    
    if(argc != 2)
    {
        std::cerr << "Usage: " << "\n\t" << argv[0] << " port" << std::endl;
    }
    
    Server svr;
    
    // // Debug
    // std::cout << "debug1" << std::endl;
    svr.Post("/compile_and_run", [](const Request &req, Response &resp){
        std::string in_json = req.body;
        std::string out_json;
        
        
        if(!in_json.empty())
        {
            // // Debug
            // std::cout << "debug4" << std::endl;
            // Json::Value in_value;
            // Json::Reader reader;
            // reader.parse(in_json, in_value);
            
            CompileAndRun::Start(in_json, &out_json);
            // std::cout << "in_json: "<<in_json<<std::endl;
            // std::cout << "out_json: "<<out_json<<std::endl;
            resp.set_content(out_json, "application/json;charset=utf-8");
        }
    });
    // // Debug
    // std::cout << "debug2" << std::endl;
    int p = std::atoi(argv[1]);
    svr.listen("0.0.0.0", p);
    // // Debug
    // std::cout << "debug3" << std::endl;











    // std::string in_json;
    // Json::Value in_value;
    // //R"()", raw string
    // in_value["code"] = R"(#include<iostream>
    // int main(){
    //     std::cout << "你可以看见我了" << std::endl;
        
    //     return 0;
    // })";
    // in_value["input"] = "";
    // in_value["cpu_limit"] = 1;
    // in_value["mem_limit"] = 10240*3;
    // Json::FastWriter writer;
    // in_json = writer.write(in_value);
    // std::cout << in_json << std::endl;
    // //这个是将来给客户端返回的json串
    // std::string out_json;
    // CompileAndRun::Start(in_json, &out_json);

    // std::cout << out_json << std::endl;
    return 0;
}